package com.mmy.service.impl.line;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mmy.controller.UtilConstants;
import com.mmy.dao.line.TLinePlaceRepository;
import com.mmy.domain.line.Place;
import com.mmy.domain.line.TLineBase;
import com.mmy.domain.line.TLinePlace;
import com.mmy.domain.line.VLineBase;
import com.mmy.domain.sys.TSysUser;
import com.mmy.service.ServiceCommon;

@Service
public class LinePlaceServiceImpl /* implements LinePlaceService */ {

	@Autowired
	private TLinePlaceRepository tLinePlaceRepository;
	@Autowired
	private ServiceCommon common;
	
	/**
	 * 函数功能说明： 查找该旅行社的集合地点
	 *
	 * @param 参数说明 tLineBase
	 * @return 返回值说明 集合地点集合
	 * @author 创建人 shangzl 修改人 shangzl
	 * @date 创建日期 2020-07-24 修改日期 2020.11.18
	 */
	public List<TLinePlace> findByOrgID(int iOrgID) {

		return tLinePlaceRepository.findByOrgID(iOrgID);
	}

	/**
	 * 获得集合地点最大编号
	 * 
	 * @return 返回值说明 最大ID
	 * @author 创建人 hanxl
	 * @date 创建日期 2020.12.10
	 */
	public int getMaxPlaceID() {
		// 流水号
		Object objCode = tLinePlaceRepository.getMaxPlaceID();
		int iID = 0;
		if (objCode != null) {
			iID = Integer.parseInt(objCode.toString());
		}
		return iID;
	}

	/**
	 * 函数功能说明： 根据名称查找集合地点
	 *
	 * @param 参数说明 tLineBase
	 * @return 返回值说明 集合地点集合
	 * @author 创建人 shangzl 修改人 shangzl
	 * @date 创建日期 2020-07-24 修改日期 2020.11.18
	 */
	public List<TLinePlace> findByPlaceName(String strPlaceName) {

		return tLinePlaceRepository.findByPlaceName(strPlaceName);
	}

	/**
	 * 函数功能说明： 根据旅行社编码和集合地点名称查询 集合地集合地点id
	 *
	 * @param 参数说明 tLineBase
	 * @return 返回值说明 集合地点id
	 * @author 创建人 liys
	 * @date 创建日期 2020-12-17
	 */
	public Integer findByPlaceNameOrgID(String strPlaceName, int iOrgID) {

		return tLinePlaceRepository.findByPlaceNameOrgID(strPlaceName, iOrgID);

	}

	/**
	 * 函数功能说明： 提交的集合地点处理
	 *
	 * @param 参数说明 tLineBase
	 * @return 返回值说明 map
	 * @author 创建人 liys
	 * @date 创建日期 2021.02.18
	 */
	public Map<String,Object> save(List<Place> lstPlace,TSysUser tSysUser) {
		
		Map<String,Object> mapPlace = new HashMap<String, Object>();
		StringBuffer strID = new StringBuffer();
		StringBuffer strTime = new StringBuffer();
		for(Place place : lstPlace) {
			String strPlaceName = place.getPlaceName();
			String strPlaceTime = place.getPlaceTime();
			Integer PlaceIDtemp = tLinePlaceRepository.findByPlaceNameOrgID(strPlaceName, tSysUser.getOrgID());
			//新建集合地
			if ("null".equals(String.valueOf(PlaceIDtemp)) || "0".equals(String.valueOf(PlaceIDtemp)) || PlaceIDtemp <= 0) {
				TLinePlace tLinePlace = new TLinePlace();
				tLinePlace.setPlaceID(common.createMaxID(UtilConstants.TableName.T_LINE_PLACE));
				tLinePlace.setOrgID(tSysUser.getOrgID());
				tLinePlace.setPlaceName(strPlaceName);
				tLinePlace.setCreateDate(new Date());
				tLinePlace.setCreator(tSysUser.getUserName());
				tLinePlaceRepository.save(tLinePlace.getPlaceID());
				tLinePlaceRepository.save(tLinePlace);
			}
			strID.append(strPlaceName+",");
			strTime.append(strPlaceTime+",");
		}
		mapPlace.put("cPlaceID",strID);
		mapPlace.put("cTime", strTime);
		return mapPlace;
	}
	/**
	 * 函数功能说明： 新增集合地点
	 *
	 * @param 参数说明 tLineBase
	 * @return 返回值说明 
	 * @author 创建人 liys
	 * @date 创建日期 2021.02.23
	 */
	public boolean save(String strPlaceName,TSysUser tSysUser) {
		
		Integer PlaceIDtemp = tLinePlaceRepository.findByPlaceNameOrgID(strPlaceName, tSysUser.getOrgID());
		if ("null".equals(String.valueOf(PlaceIDtemp)) || "0".equals(String.valueOf(PlaceIDtemp)) || PlaceIDtemp <= 0) {
			TLinePlace tLinePlace = new TLinePlace();
			tLinePlace.setPlaceID(common.createMaxID(UtilConstants.TableName.T_LINE_PLACE));
			tLinePlace.setOrgID(tSysUser.getOrgID());
			tLinePlace.setPlaceName(strPlaceName);
			tLinePlace.setCreateDate(new Date());
			tLinePlace.setCreator(tSysUser.getUserName());
			tLinePlaceRepository.save(tLinePlace.getPlaceID());
			tLinePlaceRepository.save(tLinePlace);
			return true;
		}
		return false;
	}
	
	/**
	 * 函数功能说明： 集合时间地点拼接处理
	 *
	 * @param 参数说明 vLineBase
	 * @return 返回值说明 map
	 * @author 创建人 liys
	 * @date 创建日期 2021.02.19
	 */
	public List<Map<String,String>> matchPlaceTime(VLineBase vLineBase) {
		List<Map<String,String>> lstPlaceTime = new ArrayList<>();
		String strTime = vLineBase.getTime();
		String strPlace = vLineBase.getPlaceID();
		String[] splitTime = strTime.split(",");
		String[] splitPlace = strPlace.split(",");
		for (int i = 0; i < splitTime.length; i++) {
			Map<String,String> mapPlaceTime = new HashMap<String,String>();
			mapPlaceTime.put("cPlaceTime",splitTime[i]);
			mapPlaceTime.put("cPlaceID",splitPlace[i]);
			lstPlaceTime.add(mapPlaceTime);
		}
		return lstPlaceTime;
	}
	//重载
	public List<Map<String,String>> matchPlaceTime(TLineBase tLineBase) {
		List<Map<String,String>> lstPlaceTime = new ArrayList<>();
		String strTime = tLineBase.getTime();
		String strPlace = tLineBase.getPlaceID();
		String[] splitTime = strTime.split(",");
		String[] splitPlace = strPlace.split(",");
		for (int i = 0; i < splitTime.length; i++) {
			Map<String,String> mapPlaceTime = new HashMap<String,String>();
			mapPlaceTime.put("cPlaceTime",splitTime[i]);
			mapPlaceTime.put("cPlaceID",splitPlace[i]);
			lstPlaceTime.add(mapPlaceTime);
		}
		return lstPlaceTime;
	}
	/**
	 * 函数功能说明： 修改集合地点
	 *
	 * @param 参数说明 
	 * @return 返回值说明 
	 * @author 创建人  liys
	 * @date 创建日期  2021.01.22
	 */
	public void save(TLinePlace tLinePlace,TSysUser tSysUser) {
		
		TLinePlace newLinePlace = tLinePlaceRepository.findByPlaceID(tLinePlace.getPlaceID());
		newLinePlace.setPlaceName(tLinePlace.getPlaceName());
		newLinePlace.setMemo(tLinePlace.getMemo());
		newLinePlace.setModifyDate(new Date());
		newLinePlace.setReviser(tSysUser.getUserName());
		tLinePlaceRepository.save(tLinePlace);	
	}
	
	/**
	 * 函数功能说明： 删除集合地点
	 *
	 * @param 参数说明 tLineBase
	 * @return 返回值说明 无返回值
	 * @author 创建人 shangzl 修改人 shangzl
	 * @date 创建日期 2020-07-24 修改日期 2020.11.18
	 */
	public void delPlace(List<Integer> lstPlaceID) {

		tLinePlaceRepository.delPlace(lstPlaceID);
	}

	/**
	 * 函数功能说明： 通过集合地点ID查找集合地点
	 *
	 * @param 参数说明 tLineBase
	 * @return 返回值说明 集合地点对象
	 * @author 创建人 shangzl 修改人 shangzl
	 * @date 创建日期 2020-07-24 修改日期 2020.11.18
	 */
	public TLinePlace findByPlaceID(int iPlaceID) {

		return tLinePlaceRepository.findByPlaceID(iPlaceID);
	}

	/**
	 * 函数功能说明： 新增集合地点ID
	 *
	 * @param 参数说明 tLineBase
	 * @return 返回值说明 无返回值
	 * @author 创建人 shangzl 修改人 shangzl
	 * @date 创建日期 2020-07-24 修改日期 2020.11.18
	 */
	public void save(int placeID) {

		tLinePlaceRepository.save(placeID);
	}

}
